package br.com.klis.batendoumabola.server.rest;

import java.lang.reflect.Type;
import java.util.ArrayList;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import br.com.klis.batendoumabola.client.exception.NotLoggedInException;
import br.com.klis.batendoumabola.client.service.PeladaService;
import br.com.klis.batendoumabola.server.PeladaServiceImpl;
import br.com.klis.batendoumabola.shared.Pelada;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;


@Path("batebolas")
public class BateBolasRest {
	@GET
	@POST
	@Path("all")
	//@Produces("text/plain")
	@Produces("application/json")
	public String getBooks() throws NotLoggedInException {
		PeladaService servico = new PeladaServiceImpl();
		ArrayList<Pelada> peladas = servico.getAllPeladas();
		//Gson gson = new Gson();
		Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
		Type listType = new TypeToken<ArrayList<Pelada>>() {}.getType();
		return gson.toJson(peladas,listType);
		//return gson.toJson(peladas);
	}
	
	@GET
	@Path("/nome/{nome}")
	@Produces("application/json")
	public String getBook(@PathParam("nome") String id) {
		PeladaService servico = new PeladaServiceImpl();
		Pelada pelada = new Pelada();
		pelada.setNome(id);
		ArrayList<Pelada> peladas = servico.pesquisarPeladas(pelada);
		Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).setDateFormat("yyyyMMdd").create();
		Type listType = new TypeToken<ArrayList<Pelada>>() {}.getType();
		return gson.toJson(peladas,listType);
	}
	
	@GET
	@Path("/pesquisa")
	@Produces("application/json")
	public String getBateBola(@QueryParam("nome") String nome, @QueryParam("cidade") String cidade, @QueryParam("local") String local, @QueryParam("data") String data, @QueryParam("temVagas") Boolean temVagas, @QueryParam("gratuito") Boolean gratuito) {
		PeladaService servico = new PeladaServiceImpl();
		Pelada pelada = new Pelada();
		pelada.setNome(nome);
		pelada.setCidade(cidade);
		pelada.setLocal(local);
		if (data != null){
			pelada.setDataTexto(data);
		}
		System.out.println("Param temVagas: "+ temVagas);
		pelada.setTemVagas(temVagas);
		System.out.println("Param gratuito: "+ gratuito);
		pelada.setGratuito(gratuito);
		
		ArrayList<Pelada> peladas = servico.pesquisarPeladas(pelada);
		Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
		.setDateFormat("yyyyMMdd")
		.excludeFieldsWithoutExposeAnnotation()
		.setPrettyPrinting().create();
		Type listType = new TypeToken<ArrayList<Pelada>>() {}.getType();
		return gson.toJson(peladas,listType);
	}
	
	@PUT
	@Path("/book/{isbn}")
	public void addBook(@PathParam("isbn") String id, @QueryParam("name") String name) {
		
	}
	
	@DELETE
	@Path("/book/{id}")
	public void removeBook(@PathParam("id") String id ){
		
	}
}
